package middleware

import (
	"github.com/kataras/go-sessions/v3"
	"guard/internal/conf"
	"net/http"
	"time"
)

/**
2022/12/30：新的session组件，在session封装时，进行初始化，创建获取用户信息，设置用户信息函数，进行公用
*/

// 公共session对象
var (
	sDb = sessions.New(sessions.Config{
		Cookie:                      conf.Conf.Cache.CookieName,
		Expires:                     time.Duration(conf.Conf.Cache.CookieExpiresHour) * time.Hour,
		DisableSubdomainPersistence: false,
	})
)

// SessionCache 封装组件，可以自己写新的session方式
type SessionCache struct {
	w http.ResponseWriter
	r *http.Request
	// 暂时1用别人写好的session
	Session *sessions.Session
}

func NewSessionCache(w http.ResponseWriter, r *http.Request) *SessionCache {
	sc := &SessionCache{
		w: w,
		r: r,
		// 在这里开启session
		Session: sDb.Start(w, r),
	}
	return sc
}

/*
*
取消ID，直接设置用户名，这个项目不需要校验用户权限，下面是个普通项目的存储用户信息模板
后台管理，交给了oauth的登录的jwt token里
*/

// LoginState 模板
/*
type LoginState struct {
	Id         int      `json:"id,omitempty"`
	Username   string   `json:"username,omitempty"`
	Role       []string `json:"role,omitempty"`
	Permission []string `json:"permission,omitempty"`
}
*/

// GetLoginState 获取登录状态
func (s *SessionCache) GetLoginState() (userInfo string) {
	user := s.Session.Get(conf.Conf.Cache.LoginUserKey)
	if user == nil {
		return ""
	}
	return user.(string)
}

// SetLoginState 设置登录状态
func (s *SessionCache) SetLoginState(username string) {
	s.Session.Set(conf.Conf.Cache.LoginUserKey, username)
}
